Configurar MySQL Container

Descripcion

Como configurar un contendor MySQL para guardar la información de la base de datos permanentemente en un volumen y utilizar un script .sql para iniciar la base de datos en la primera ejecución del contenedor

Metodo

Para esto usaremos docker compose, el script que usaremos para el compose (docker-compose.yml) será el siguiente:

version: '3'

services:

  skill-matrix-mysql:
    image: mysql:5
    restart: on-failure
    volumes:
      - ./mydb-db:/var/lib/mysql
      - ./mydb-init-db:/docker-entrypoint-initdb.d
    environment:
      - MYSQL_ROOT_PASSWORD=admin
      - MYSQL_DATABASE=mysample
      - MYSQL_USER=myuser
      - MYSQL_PASSWORD=mypass
    ports:
      - 3306:3306

La parte clave del script está en la seccion de volumes, indicamos dos carpetas que deberían de existir en nuestro sistema y que se mapean con unas carpetas concretas del contenedor, en concreto la carpeta mydb-db almacenará todos los archivos relativos a la base de datos, y la carpeta mydb-init-db será donde colocaremos nuestro script que usaremos para que la base de datos se inicie en la primera ejecución.

Primero creamos las carpetas mydb-db y mydb-init-db justo donde hemos colocado nuestro docker-compose.yml en la carpeta mydb-init-db colocaremos el script sql que se usará para iniciar la base de datos:

La carpeta principal quedaría tal que así:

Y la carpeta mydb-init-db así:

Ahora simplemente tenemos que ejecutar el comando docker-compose up dentro de la carpeta donde tenemos el archivo docker-compose.yml y se lanzará el contenedor y se creará la base de datos usando el script que hayamos puesto en la carpeta mydb-init-db.

NOTA: el nombre de la base de datos que tengamos dentro de nuestro script .sql (en las sentencias CREATE DATABASE o USE por ejemplo), tiene que coincidir con el nombre de la base de datos que hemos indicado en el archivo docker-compose.yml, si no el archivo .sql no ejecutará las sentencías dentro de dicha base de datos.

Una vez hayamos realizado el primer arranque del contenedor toda la información de la base de datos quedará almacenada en la carpeta mydb-db si queremos eliminar la base de datos para que se vuelva a cargar el script inicial y dejar la base de datos como en el inicio simplemente tenemos que parar el contenedor, borrar el contenido de la carpeta mydb-db y realanzar el contenedor, la base de datos se volvera a cargar desde cero.

Tags

MySQL | Init | Script